#include <ctype.h>
#include "core.h"

enum
{
    OPTION_T,
    OPTION_D,
    OPTION_P,
    OPTION_N,
    OPTION_MAX
};

static struct option_list_t option_list[] = 
{
    {"-t",OPTION_T,1024},
    {"-d",OPTION_D,0},
    {"-p",OPTION_P,256},
    {"-n",OPTION_N}
};

int isNumeric(const char *str) {
    while (*str) {
        if (!isdigit(*str)) {
            return 0; // 如果当前字符不是数字字符，则返回 0
        }
        str++;
    }
    return 1; // 如果所有字符都是数字字符，则返回 1
}

int option_parse(struct option_list_t *option_list,char *option_value)
{
    int value = 0;

    if ( isNumeric(option_value) == 0)
    {
        return 0;
    }

    value = atoi(option_value);
    switch (option_list->type)
    {
        case OPTION_T:
            if( value == option_list->def )
            {
                printf("option \"%s\" use default value [%d]\n",option_list->name,option_list->def);
                break;
            }
            else
            {
                printf("get option No[%d] name \"%s\" value %d \n",option_list->type,option_list->name,value);
            }
            break;

        case OPTION_D:
            if( value == option_list->def )
            {
                printf("option \"%s\" use default value [%d]\n",option_list->name,option_list->def);
                break;
            }
            else
            {
                printf("get option No[%d] name \"%s\" value %d \n",option_list->type,option_list->name,value);
            }
            break;

        case OPTION_P:
            if( value == option_list->def )
            {
                printf("option \"%s\" use default value [%d]\n",option_list->name,option_list->def);
                break;
            }
            else
            {
                printf("get option No[%d] name \"%s\" value %d \n",option_list->type,option_list->name,value);
            }
            break;

        default:
            printf("option \"%s\" case not found \n",option_list->name);
            break;
    }

    return 1;
}

int user_func_register(void)
{
    create_user_option_list(option_list,sizeof(option_list)/sizeof(struct option_list_t));

    create_user_option_parse(option_parse);
}